#include "main.h"

// 初始化队列。初始化成功返回0；初始化失败返回1。
int init_queue(Queue ** q)
{
    (*q)=(Queue*) malloc(sizeof(Queue));
    if((*q) == NULL)
        return 1;
    else {
        (*q)->size = 0;
    }
    return 0;
}

// 在队列q的尾巴上增加一个元素，其值为value。增加成功，返回0；增加失败，返回1
int enqueue (Queue * q, int value)
{
    if(q->size > QUEUE_MAX_SIZE)
    {
        return 1;
    }
    q->elements[q->size] = value;
    printf("%d\n",q->elements[q->size]);
    q->size++;
    return 0;

}

// 从队列q上摘取（去掉）一个元素，将其值放入value中。摘取成功，返回0；摘取失败，返回1。
int dequeue(Queue * q, int *value)
{
    if(q->size == 0)
        return 1;
    *value = q->elements[0];
    for(int i=0;i<q->size;i++)
    {
        q->elements[i] = q->elements[i+1];
    }
    q->size--;
    return 0;

}

// 获取队列q的第一个元素，但是并不去掉该元素，并将该值放入value中。获取成功返回0；获取失败，返回1。
int first(Queue * q, int * value)
{
    if(q->size == 0)
        return 1;
    *value = q->elements[0];
    printf("%d\n",*value);
    return 0;
}

// 判断队列q是否为空。为空，返回0；不为空，返回1。
int is_empty(Queue * q)
{
    if(q->size == 0)
        return 0;
    else
        return 1;
}

// 返回队列q中的元素个数。
int size(Queue * q)
{
    return q->size;
}

int main()
{
    int value;
    int i;
    Queue  *q;
    init_queue(&q);
    for(i = 1;i<6;i++)
    {
        enqueue(q,i);
    }
    printf("队列的第一个元素为：");
    first(q,&q->elements[0]);
    dequeue(q,&value);
    printf("删除第一个元素后队列的第一个元素为：");
    first(q,&q->elements[0]);
    printf("队列的长度为：%d\n", size(q));
    printf("%d\n", is_empty(q));

}